#include "bfs.h"

BFS::BFS()
{
}

BFS::BFS(int i, int j)
{
    this->mInicio = i;
    this->mFim = j;
    this->mGrafo = new MatrizAdjacencia();
    this->mGrafo->constroi();
}

void BFS::retornaCaminho()
{
    this->mFila.push(this->mInicio);
    int indiceAtual = this->mInicio;
    int indicePai;
    int* filhosAtuais;

    std::cout << "BFS Caminho: ";

    while ( !this->mFila.empty() && indiceAtual != this->mFim )
    {
        indiceAtual = this->mFila.front();
        this->mFila.pop();
        std::cout << indiceAtual;
        if (indiceAtual != this->mFim)
        {
            std::cout << " -> ";
        }

        filhosAtuais = this->mGrafo->getFilhos(indiceAtual);
        for ( int i = 0; i < this->mGrafo->getNumVertices(); i++ )
        {
            if(filhosAtuais[i] != 0)
            {
                this->mFila.push(i);
            }
        }
    }
    std::cout << std::endl;
};
